package yh.design.strategy;

import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.stereotype.Component;
import yh.design.annotation.PayStrategy;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 实际开发中 第二种方式 封装支付策略 map
 * @author: zyh
 * @date: 2025/5/15 15:09
 **/
@Component
public class IPayContextMap_2 {


    //支付算法策略组
    public static Map<Integer, IPayment> payStrtegyMap = new HashMap<>();


    /**
     * 实例化支付方式对象
     */
    @Resource
    public List<IPayment> payList;

    /**
     * 初始化支付方式策略数据
     */
    @PostConstruct
    public void initPayMap(){
        payList.forEach(item ->{
            PayStrategy annotation = AnnotationUtils.findAnnotation(item.getClass(), PayStrategy.class);
            if (null != annotation){
                payStrtegyMap.put(annotation.pay().getPayWay(),item);
                }
            });
        }

    }


